#ifndef SHADER_H_
#define SHADER_H_

#include <map>

class Shader
{
protected:
	GLuint programID;
	std::map<std::string, GLuint> uniformMap;
public:
	Shader() ;
	~Shader();

	virtual bool init(const std::string& vertexShader,
				const std::string& fragmentShader);
	virtual void destroy();

			void useThisShader();
	static	void useNullShader();

			void pushUniformLocation(const std::string& idName);

			void pushUniformMatrix4fv(const std::string& idName,
								  GLfloat* mat, int count = 1, bool normalized = false);

			void pushUniform3f(const std::string& idName,
						   const glm::vec3& _3f);

			void pushUniform1i(const std::string& idName,
							const GLuint& textureIdx);	
};

#endif